home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / Prog / S / Scientist's Spreadsheet / Procedures / Useful Procedures < prev   
Encoding:
Text File  |  1987-02-26  |  16.4 KB  |  767 lines  |  [TEXT/EDIT]

  1. '' 'useful Scientists Spreadsheet V2.17 procedures, by William Menke'
  2. '' 'Caveat Emptor'
  3.  
  4.  
  5. label arrow
  6. '' 'draws an arrow on the graph where the user clicks'
  7. '' 'argument 1 is the arrow line type (solid, bold, dotted, dashed)'
  8. setvar xminsave @xmin
  9. setvar xmaxsave @xmax
  10. setvar yminsave @ymin
  11. setvar ymaxsave @ymax
  12. yaxis 0 0.6
  13. xaxis 0 1
  14. cursor 'pick head of arrow'
  15. setvar x @xpos
  16. setvar y @ypos
  17. cursor 'pick tail of arrow'
  18. vector @x @y @xpos @ypos @arg1
  19. vm @x - @xpos = dx
  20. vm @y - @ypos = dy
  21. vm @dy / @dx = theta
  22. vf atan @theta theta
  23. if @dx > 0 
  24.         vm 3.14159 + @theta = theta
  25. vm @theta - 0.3 = theta
  26. vf sin @theta st
  27. vf cos @theta ct
  28. vm @ct * 0.04 = dx
  29. vm @st * 0.04 = dy
  30. vm @dx + @x = xpos
  31. vm @dy + @y = ypos
  32. vector @x @y @xpos @ypos @arg1
  33. vm @theta + 0.6 = theta
  34. vf sin @theta st
  35. vf cos @theta ct
  36. vm @ct * 0.04 = dx
  37. vm @st * 0.04 = dy
  38. vm @dx + @x = xpos
  39. vm @dy + @y = ypos
  40. vector @x @y @xpos @ypos @arg1
  41. xaxis @xminsave @xmaxsave
  42. yaxis @yminsave @ymaxsave
  43. delete variable xminsave
  44. delete variable xmaxsave
  45. delete variable yminsave
  46. delete variable ymaxsave
  47. delete variable x
  48. delete variable y
  49. delete variable st
  50. delete variable ct
  51. delete variable dx
  52. delete variable dy
  53. delete variable theta
  54. return
  55.  
  56.  
  57. label autocorrelation
  58. '' 'autocorrelation of time series in column 2'
  59. '' 'columns 3 and 4 are used, autocorrelation returned in 2'
  60. '' 'the number of rows in the table is doubled, so'
  61. '' 'the table allocation must be sufficiently large'
  62. '' 'the table must be interpolated.  col 1 is reset to lag'
  63. refresh false
  64. cols 4
  65. copy col 2 3
  66. reverse 3 3
  67. setvar length @rows
  68. vm @rows + 1 = a
  69. vm @rows * 2 = b
  70. rows @b
  71. constant 0 2 @a @b
  72. constant 0 3 @a @b
  73. conv 2 3 @length 4
  74. vm -1.0 * @length = a
  75. vm @samp * @a = a
  76. vm @a + @samp = a
  77. start @a
  78. copy col 4 2
  79. cols 2
  80. delete variable a
  81. delete variable b
  82. delete variable length
  83. return
  84.  
  85.  
  86. label clip
  87. '' 'clips values in a column'
  88. '' 'argument 1: minimum value'
  89. '' 'argument 2: maximum value
  90. '' 'argument 3: input col'
  91. '' 'argument 4: output col'
  92. refresh false
  93. copy col @arg3 @arg4
  94. for i 1 @rows
  95.     set x table @i @arg4
  96.     if @x < @arg1
  97.         table @i @arg4 @arg1
  98.     if @x > @arg2
  99.         table @i @arg4 @arg2
  100.     next i
  101. delete variable x
  102. return
  103.  
  104.  
  105. label crosscorrelation
  106. '' 'autocorrelation of time series in columns 2 and 3'
  107. '' 'column 4 is used, crosscorrelation returned in 3'
  108. '' 'the number of rows in the table is doubled, so'
  109. '' 'the table allocation must be sufficiently large'
  110. '' 'the table must be interpolated.  col 1 is reset to lag'
  111. refresh false
  112. cols 4
  113. reverse 3 3
  114. setvar length @rows
  115. vm @rows + 1 = a
  116. vm @rows * 2 = b
  117. rows @b
  118. constant 0 2 @a @b
  119. constant 0 3 @a @b
  120. conv 2 3 @length 4
  121. vm -1.0 * @length = a
  122. vm @samp * @a = a
  123. vm @a + @samp = a
  124. start @a
  125. copy col 4 2
  126. cols 2
  127. delete variable a
  128. delete variable b
  129. delete variable length
  130. return
  131.  
  132.  
  133. label drawcurve
  134. '' 'draw a curve by clicking the mouse on the graphics screen'
  135. '' 'prompts for input'
  136. refresh false
  137. input arg1 'enter abcissa column'
  138. input arg2 'enter ordinate column'
  139. input xmin 'enter the minimum absicca value'
  140. input xmax 'enter the maximum abcissa value'
  141. xaxis @xmin @xmax
  142. input ymin 'enter the minimum ordinate value'
  143. input ymax 'enter the maximum ordinate value'
  144. yaxis @ymin @ymax
  145. clear
  146. axes
  147. setvar x 0
  148. setvar y 0
  149. for i 1 @rows
  150.     cursor 'pick a point'
  151.     table @i @arg1 @xpos
  152.     table @i @arg2 @ypos
  153.     if @i <> 1
  154.         vector @x @y @xpos @ypos
  155.         setvar x @xpos
  156.     setvar y @ypos
  157.     next i
  158. delete variable x
  159. delete variable y
  160. return
  161.  
  162.  
  163. label drawhist
  164. '' 'draws a histogram'
  165. '' 'argument 1 is the column containing the data'
  166. '' 'assumes the table is set up as it would be after a histogram command'
  167. '' 'interpolated table only'
  168. refresh false
  169. scale 1 @arg1
  170. clear
  171. axes
  172. cm @arg1 /# 2.0 = @arg1
  173. vbars 1 @arg1 @arg1
  174. cm @arg1 *# 2.0 = @arg1
  175. return
  176.  
  177.  
  178. label letter
  179. '' 'puts character string in graphics window at mouse click'
  180. '' 'argument 1:  the string'
  181. cursor 'click where you want the string'
  182. anotate @xpos @ypos @arg1
  183. return
  184.  
  185.  
  186. label logplot
  187. '' 'log-log plot'
  188. '' 'prompts for input'
  189. input xcol 'abcissa col? '
  190. input left 'left power of ten'
  191. input width 'number of decades? '
  192. vm @left + @width = right
  193. yaxis @left @right
  194. input ycol 'ordinate col? '
  195. input top 'top power of ten? '
  196. input height 'number of decades'
  197. vm @top - @height = bottom
  198. input symbol 'plotting symbol? '
  199. input axes 'plot axes? y or n'
  200. xaxis @left @right
  201. yaxis @bottom @top
  202. if @axes s= y 28
  203. clear
  204. vector @left @bottom @left @top
  205. vector @left @bottom @right @bottom
  206. vm @ymax - @ymin = y1
  207. vm @y1 / 30 = y1
  208. vm @y1 * 3 = y2
  209. vm @ymin + @y1 = y1
  210. vm @ymin - @y2 = y2
  211. for i @left @right
  212.     vector @i @ymin @i @y1
  213.     vm @i * 2.302585 = t
  214.     vf exp @t t
  215.     anotate @i @y2 @t
  216.     next i
  217. vm @xmax - @xmin = y1
  218. vm @y1 / 30 = y1
  219. vm @y1 * 5.0 = y2
  220. vm @xmin + @y1 = y1
  221. vm @xmin - @y2 = y2
  222. for i @bottom @top
  223.     vector @xmin @i @y1 @i
  224.     vm @i * 2.302585 = t
  225.     vf exp @t t
  226.     anotate @y2 @i @t
  227.     next i
  228. delete variable t
  229. delete variable y1
  230. delete variable y2
  231. setvar oldinterp @interpolated
  232. if @xcol = 1
  233.     interpolated false
  234. if @ycol = 1
  235.     interpolated false
  236. cf ln @xcol @xcol
  237. cm @xcol /# 2.302585 = @xcol
  238. cf ln @ycol @ycol
  239. cm @ycol /# 2.3026 = @ycol
  240. plot @xcol @ycol @symbol
  241. cm @xcol *# 2.302585 = @xcol
  242. cf exp @xcol @xcol
  243. cm @ycol *# 2.302585 = @ycol
  244. cf exp @ycol @ycol
  245. if @xcol = 1
  246.     interpolated @oldinterp
  247. if @ycol = 1
  248.     interpolated @oldinterp
  249. delete variable oldinterp
  250. delete variable left
  251. delete variable right
  252. delete variable top
  253. delete variable bottom
  254. delete variable height
  255. delete variable width
  256. delete variable symbol
  257. delete variable xcol
  258. delete variable ycol
  259. return
  260.  
  261.  
  262. label movingaverage
  263. '' 'moving average with centered triangualar averaging operator'
  264. '' 'points off end of signal assumed to be zero'
  265. '' 'prompts for input'
  266. refresh false
  267. if @interpolated s<> true 3
  268.     prompt 'Error: table must be interpolated'
  269.     beep
  270.     return
  271. input half-width 'half width of triangle in units of col 1?'
  272. vmath @half-width / @samp = half-width
  273. vfunction int @half-width @half-width
  274. prompt 'half width = ' @half-width ' samples'
  275. vmath @half-width * @samp = height
  276. vmath 1 / @height = height
  277. input input-col 'input column?'
  278. input output-col 'output column?'
  279. input temp-col 'temporary result column?'
  280. copy col @input-col @output-col
  281. constant @height @temp-col 1 @half-width
  282. convolve @output-col @temp-col @half-width @output-col
  283. reverse @output-col @output-col
  284. convolve @output-col @temp-col @half-width @output-col
  285. reverse @output-col @output-col
  286. delete variable half-width
  287. delete variable  input-col
  288. delete variable output-col
  289. delete variable temp-col
  290. delete variable height
  291. return
  292.  
  293.  
  294. label naner
  295. '' 'you click on the graphics screen'
  296. '' 'to change the value of a table entry to NaN'
  297. '' 'argument 1 is the ordinate column'
  298. '' 'interpolated tables only'
  299. '' 'procedure must be aborted from the menu'
  300. refresh false
  301. scale 1 2
  302. label naner-loop
  303. clear
  304. plot 1 @arg1
  305. cursor 'pick a point'
  306. vf row @xpos xpos
  307. table @xpos @arg1 NaN
  308. goto naner-loop
  309. return
  310.  
  311.  
  312. label numberplot
  313. '' 'plots data and anotates the row number to the right of'
  314. '' 'each point'
  315. '' 'argument 1 is the abcissa column'
  316. '' 'argument 2 is the ordinate column'
  317. '' 'argument 3 is the plotting symbol (defaults to x)'
  318. if @arg3 s= ''
  319.     setvar arg3 x
  320. plot @arg1 @arg2 @arg3
  321. for i 1 @rows
  322.     set x table @i @arg1
  323.     set y table @i @arg2
  324.     anotate @x @y @i
  325.     next i
  326. delete variable x
  327. delete variable y
  328. return
  329.  
  330.  
  331.  
  332. label plot1
  333. '' 'plot all columns against column 1'
  334. '' 'argument 1: plotting symbol'
  335. '' 'argument 2: optional second plotting symbol'
  336. '' 'example:  x   plot1  solid  circles'
  337. '' 'plots each column with solid line and circles'
  338. for column 2 @cols
  339.     prompt 'column ' @column ' against column 1'
  340.     clear
  341.     scale 1 @column
  342.     axes
  343.     plot 1 @column @arg1
  344.     if @arg2 s<> ''
  345.         plot 1 @column @arg2
  346.     input question 'plot next column? y or n'
  347.     if @question s= n
  348.         return
  349.     next column
  350. return
  351.  
  352.  
  353.  
  354. label plotall
  355. '' 'plot all columns againsteach other'
  356. '' 'argument 1: plotting symbol'
  357. '' 'argument 2: optional second plotting symbol'
  358. '' 'example:  x   plotall  solid  circles'
  359. '' 'plots each column with solid line and circles'
  360. vmath @cols - 1 = end
  361. for xcolumn 1 @end
  362. vmath @xcolumn + 1 = begin
  363. for ycolumn  @begin @cols
  364.     prompt 'column ' @ycolumn ' against ' @xcolumn
  365.     clear
  366.     scale  @xcolumn @ycolumn
  367.     axes
  368.     plot @xcolumn @ycolumn @arg1
  369.     if @arg2 s<> ''
  370.         plot @xcolumn @ycolumn @arg2
  371.     input question 'next plot? y or n'
  372.     if @question s= n 3
  373.         delete variable begin
  374.         delete variable end
  375.         return
  376.     next ycolumn
  377.     next xcolumn
  378. delete variable begin
  379. delete variable end
  380. return
  381.  
  382.  
  383. label pointer
  384. '' 'draws a labeled arrow on the graph where the user clicks'
  385. '' 'argument 1 is the character string'
  386. '' 'argument 2 is the arrow line type (solid, bold, dotted, dashed)'
  387. refresh false
  388. setvar xminsave @xmin
  389. setvar xmaxsave @xmax
  390. setvar yminsave @ymin
  391. setvar ymaxsave @ymax
  392. yaxis 0 0.6
  393. xaxis 0 1
  394. cursor 'pick head of arrow'
  395. setvar x @xpos
  396. setvar y @ypos
  397. cursor 'pick tail of arrow'
  398. vector @x @y @xpos @ypos @arg2
  399. concat arg1 ' ' @arg1
  400. anotate @xpos @ypos @arg1
  401. vm @x - @xpos = dx
  402. vm @y - @ypos = dy
  403. vm @dy / @dx = theta
  404. vf atan @theta theta
  405. if @dx > 0 
  406.         vm 3.14159 + @theta = theta
  407. vm @theta - 0.3 = theta
  408. vf sin @theta st
  409. vf cos @theta ct
  410. vm @ct * 0.04 = dx
  411. vm @st * 0.04 = dy
  412. vm @dx + @x = xpos
  413. vm @dy + @y = ypos
  414. vector @x @y @xpos @ypos @arg2
  415. vm @theta + 0.6 = theta
  416. vf sin @theta st
  417. vf cos @theta ct
  418. vm @ct * 0.04 = dx
  419. vm @st * 0.04 = dy
  420. vm @dx + @x = xpos
  421. vm @dy + @y = ypos
  422. vector @x @y @xpos @ypos @arg2
  423. xaxis @xminsave @xmaxsave
  424. yaxis @yminsave @ymaxsave
  425. delete variable xminsave
  426. delete variable xmaxsave
  427. delete variable yminsave
  428. delete variable ymaxsave
  429. delete variable x
  430. delete variable y
  431. delete variable st
  432. delete variable ct
  433. delete variable dx
  434. delete variable dy
  435. delete variable theta
  436. return
  437.  
  438.  
  439. label pt
  440. '' 'does a clear, scale, axes, and plot'
  441. '' 'same arguments as the plot command'
  442. '' 'argument 1: abcissa_col'
  443. '' 'argument 2: ordinate col'
  444. clear
  445. scale @arg1 @arg2
  446. axes
  447. plot @arg1 @arg2 @arg3
  448. return
  449.  
  450.  
  451. label rf
  452. label rfunction
  453. '' 'row functions, like cfunction command'
  454. '' 'argument 1, function name'
  455. '' 'argument 2, input row'
  456. '' 'argument 3, output row'
  457. refresh false
  458. for i 1 @cols
  459.     set x table @arg2 @i
  460.     vf @arg1 @x x
  461.     table  @arg3 @i @x
  462.     next i
  463. delete variable x
  464. return
  465.  
  466.  
  467. label rm
  468. label rmath
  469. '' 'row arithmetic, like cmath command, except omit = sign'
  470. '' 'argument 1, first input row or constant'
  471. '' 'argument 2, operator'
  472. '' 'argument 3, second input row'
  473. '' 'argument 4, output row'
  474. refresh false
  475. if @arg2 s= + 7
  476.     for i 1 @cols
  477.         set x table @arg1 @i
  478.         set y table @arg3 @i
  479.         vm @x + @y = x
  480.         table @arg4 @i @x
  481.         next i
  482.     goto rm-finish
  483. if @arg2 s= - 7
  484.     for i 1 @cols
  485.         set x table @arg1 @i
  486.         set y table @arg3 @i
  487.         vm @x - @y = x
  488.         table @arg4 @i @x
  489.         next i
  490.     goto rm-finish
  491. if @arg2 s= * 7
  492.     for i 1 @cols
  493.         set x table @arg1 @i
  494.         set y table @arg3 @i
  495.         vm @x * @y = x
  496.         table @arg4 @i @x
  497.         next i
  498.     goto rm-finish
  499. if @arg2 s= / 7
  500.     for i 1 @cols
  501.         set x table @arg1 @i
  502.         set y table @arg3 @i
  503.         vm @x + @y = x
  504.         table @arg4 @i @x
  505.         next i
  506.     goto rm-finish
  507. if @arg2 s= +# 6
  508.     for i 1 @cols
  509.         set x table @arg1 @i
  510.         vm @x + @arg3 = x
  511.         table @arg4 @i @x
  512.         next i
  513.     goto rm-finish
  514. if @arg2 s= -# 6
  515.     for i 1 @cols
  516.         set x table @arg1 @i
  517.         vm @x - @arg3 = x
  518.         table @arg4 @i @x
  519.         next i
  520.     goto rm-finish
  521. if @arg2 s= *# 6
  522.     for i 1 @cols
  523.         set x table @arg1 @i
  524.         vm @x * @arg3 = x
  525.         table @arg4 @i @x
  526.         next i
  527.     goto rm-finish
  528. if @arg2 s= /# 6
  529.     for i 1 @cols
  530.         set x table @arg1 @i
  531.         vm @x / @arg3 = x
  532.         table @arg4 @i @x
  533.         next i
  534.     goto rm-finish
  535. if @arg2 s= #+ 6
  536.     for i 1 @cols
  537.         set x table @arg3 @i
  538.         vm @arg1 / @x = x
  539.         table @arg4 @i @x
  540.         next i
  541.     goto rm-finish
  542. if @arg2 s= #- 6
  543.     for i 1 @cols
  544.         set x table @arg3 @i
  545.         vm @arg1 - @x = x
  546.         table @arg4 @i @x
  547.         next i
  548.     goto rm-finish
  549. if @arg2 s= #* 6
  550.     for i 1 @cols
  551.         set x table @arg3 @i
  552.         vm @arg1 * @x = x
  553.         table @arg4 @i @x
  554.         next i
  555.     goto rm-finish
  556. if @arg2 s= #/ 6
  557.     for i 1 @cols
  558.         set x table @arg3 @i
  559.         vm @arg1 / @x = x
  560.         table @arg4 @i @x
  561.         next i
  562.     goto rm-finish
  563. p 'no such operator'
  564. label rm-finish
  565. delete variable x
  566. return
  567.  
  568.  
  569. label scroller
  570. '' 'scrolls through a long plot'
  571. '' 'you click the mouse to the right or left of center to scroll'
  572. '' 'argument 1 is the ordinate column'
  573. '' 'argument 2 is the screen width'
  574. '' 'interpolated tables only'
  575. '' 'this procedure must be aborted from the menu'
  576. refresh false
  577. scale 1 @arg1
  578. vm @arg2 + @xmin = xmax
  579. xaxis @xmin @xmax
  580. vm @arg2 * 0.75 = arg2
  581. vm @xmax + @xmin = middle
  582. vm @middle / 2 = middle
  583. label scroller-loop
  584.     clear
  585.     axes
  586.     plot 1 @arg1
  587.     cursor 'pick scroll direction'
  588.       if @xpos < @middle 2
  589.         vm @xmin - @arg2 = xmin
  590.         vm @xmax - @arg2 = xmax
  591.    if @xpos > @middle 2
  592.         vm @xmin + @arg2 = xmin
  593.         vm @xmax + @arg2 = xmax
  594.     xaxis @xmin @xmax
  595.     vm @xmax + @xmin = middle
  596.     vm @middle / 2 = middle
  597.     goto scroller-loop
  598. return
  599.  
  600.  
  601. label semilogplot
  602. '' 'semi-log plot'
  603. '' 'prompts for input'
  604. input xcol 'abcissa col? '
  605. input ycol 'ordinate col? '
  606. input top 'top power of ten? '
  607. input height 'number of decades'
  608. scale @xcol @ycol
  609. vm @top - @height = bottom
  610. yaxis @bottom @top
  611. input symbol 'plotting symbol? '
  612. input axes 'plot axes? y or n'
  613. if @axes s= y 31
  614. clear
  615. vector @xmin @ymin @xmin @ymax
  616. vector @xmin @ymin @xmax @ymin
  617. vm @xmax - @xmin = dx
  618. vm @dx / 5 = dx
  619. vm @ymax - @ymin = y1
  620. vm @y1 / 20 = y1
  621. vm @y1 * 2 = y2
  622. vm @ymin + @y1 = y1
  623. vm @ymin - @y2 = y2
  624. setvar x @xmin
  625. for i 1 6
  626.     vector @x @ymin @x @y1
  627.     anotate @x @y2 @x
  628.     vm @x + @dx = x
  629.     next i
  630. vm @xmax - @xmin = y1
  631. vm @y1 / 20 = y1
  632. vm @y1 * 3.2 = y2
  633. vm @xmin + @y1 = y1
  634. vm @xmin - @y2 = y2
  635. for i @bottom @top
  636.     vector @xmin @i @y1 @i
  637.     vm @i * 2.302585 = t
  638.     vf exp @t t
  639.     anotate @y2 @i @t
  640.     next i
  641. delete variable y1
  642. delete variable y2
  643. delete variable x
  644. delete variable dx
  645. setvar oldinterp @interpolated
  646. if @ycol = 1
  647.     interpolatef false
  648. cf ln @ycol @ycol
  649. cm @ycol /# 2.302585 = @ycol
  650. plot @xcol @ycol @symbol
  651. cm @ycol *# 2.302585 = @ycol
  652. cf exp @ycol @ycol
  653. if @ycol = 1
  654.     interpolated @oldinterp
  655. delete variable axes
  656. delete variable oldinterp
  657. delete variable top
  658. delete variable bottom
  659. delete variable height
  660. delete variable symbol
  661. delete variable xcol
  662. delete variable ycol
  663. return
  664.  
  665.  
  666. label separate
  667. '' 'separates data in a column into two groups, less than and greater than'
  668. '' 'a given test value'
  669. '' 'argument 1: input column'
  670. '' 'argument 2: output column of > values'
  671. '' 'argument 3: output column of < values'
  672. '' 'argument 4: test value'
  673. refresh false
  674. copy col @arg1 @arg2
  675. copy col @arg1 @arg3
  676. for i 1 @rows
  677.     set t table @i @arg1
  678.     if   @t    >     @arg4
  679.         table    @i     @arg2     NaN
  680.     if    @t    <=    @arg4
  681.         table     @i      @arg3    NaN
  682.     next i
  683. delete variable t
  684. return
  685.  
  686.  
  687. label stickplot
  688. '' 'plot of vertical sticks'
  689. '' 'argument 1 is abcissa column'
  690. '' 'argument 2 is ordinate column'
  691. refresh false
  692. cm @arg2 /# 2.0 = @arg2
  693. vbars @arg1 @arg2 @arg2
  694. cm @arg2 *# 2.0 = @arg2
  695. vector @xmin 0 @xmax 0
  696. return
  697.  
  698.  
  699. label transpose
  700. '' 'transposed rows and columns of a table'
  701. refresh false
  702. setvar oldrows @rows
  703. setvar oldcols @cols
  704. if @rows < @oldcols
  705.     rows @oldcols
  706. if @cols < @oldrows
  707.     cols @oldrows
  708. if @oldrows >= @oldcols 8
  709.     for irow 1 @oldrows
  710.     for icol 1 @irow
  711.         set x table @irow @icol
  712.         set y table @icol @irow
  713.         table @irow @icol @y
  714.         table @icol @irow @x
  715.         next icol
  716.         next irow
  717. if @oldrows < @oldcols 8
  718.     for icol 1 @oldcols
  719.     for irow 1 @icol
  720.         set x table @irow @icol
  721.         set y table @icol @irow
  722.         table @irow @icol @y
  723.         table @icol @irow @x
  724.         next irow
  725.         next icol
  726. rows @oldcols
  727. cols @oldrows
  728. delete variable x
  729. delete variable y
  730. return
  731.  
  732.  
  733.  
  734. label zapper
  735. '' 'you click on the graphics screen'
  736. '' 'to change the value of a table entry  to the cursor pos'
  737. '' 'argument 1 is the ordinate column'
  738. '' 'interpolated tables only'
  739. '' 'procedure must be aborted from the menu'
  740. refresh false
  741. scale 1 2
  742. label zapper-loop
  743. clear
  744. plot 1 @arg1
  745. cursor 'pick a point'
  746. vf row @xpos xpos
  747. table @xpos @arg1 @ypos
  748. goto zapper-loop
  749. return
  750.  
  751. label zpb
  752. label zerophasebandpass
  753. '' 'like bandpass, but zero phase and rolloff twice as fast'
  754. '' 'same arguments as bandpass command'
  755. refresh false
  756. bandpass @arg1 @arg2 @arg3 @arg4
  757. reverse @arg4 @arg4
  758. bandpass @arg1 @arg2 @arg4 @arg4
  759. reverse @arg4 @arg4
  760. return
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.